/*
 * MacCrypto.h
 *
 *  Created on: 2023年7月20日
 *      Author: fjx
 */

#ifndef MAC_MACCRYPTO_H_
#define MAC_MACCRYPTO_H_

#include "RBFKeyNvm.h"

/*
 * @note: CONFIG_LOG_MACCRYPTO 定义的话使能加解密功能
 * @note: CONFIG_MACCRYPTO
 *
 *
 */
#define xCONFIG_LOG_MACCRYPTO                                            //调试信息使能
#define CONFIG_MACCRYPTO                                                //使能mac加解密,不定义,明文传输

SecureElementStatus_t RBF_mac_payload_crypto(uint8_t *packet, uint32_t len,KeyIdentifier_t identifier);
SecureElementStatus_t RBF_mac_payload_verify(uint8_t *packet,uint32_t len,KeyIdentifier_t identifier);

SecureElementStatus_t RBF_aes_de(KeyIdentifier_t identifier,
                                 uint8_t *ciphertext,
                                 size_t ciphertext_size,
                                 uint8_t *plaintext,
                                 size_t plaintext_length,
                                 size_t *ciphertext_length
                                 );
SecureElementStatus_t RBF_aes_ae(KeyIdentifier_t identifier,
                                 const uint8_t *plaintext,
                                 size_t plaintext_length,
                                 uint8_t *ciphertext,
                                 size_t ciphertext_size,
                                 size_t *ciphertext_length );
/*
 *@brief 通过动态加载key,进行AES-CCM加密
 *@param packet数据包
 *@param len加密的长度 目前该字段没有使用，内部取 packet[0]字段作为长度
 *@param key 加密的密码，128bit
 */
SecureElementStatus_t RBF_mac_payload_crypto_dynamic_key(uint8_t *packet, uint32_t len,uint8_t *key);
/*
 *@brief 通过动态加载key,进行AES-CCM加密
 *@param packet数据包
 *@param len加密的长度   目前该字段没有使用，内部取 packet[0]字段作为长度
 *@param key 加密的密码，128bit
 */
SecureElementStatus_t RBF_mac_payload_verify_dynamic_key(uint8_t *packet,uint32_t len,uint8_t *key);


SecureElementStatus_t mac_payload_verify(uint8_t *packet);
SecureElementStatus_t mac_payload_crypto(uint8_t *packet);

#endif /* MAC_MACCRYPTO_H_ */
